From: Dimitrios Eftaxiopoulos
Date: Sat, 24 Mar 2012 16:07:46 +0000 (+0200)
Subject: Imported Upstream version 2~rc2+svn380
X-Git-Tag: archive/raspbian/2.5-2+rpi1^2~26^2~31
X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=0146b52e53cff3f046e1d8b012027a5cde726229;p=mathgl.git
Imported Upstream version 2~rc2+svn380
---
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 423ccd8..2921bc7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,7 +121,8 @@ else(enable-all OR enable-jpeg)
set(MGL_HAVE_JPEG 0)
endif(enable-all OR enable-jpeg)
-if((enable-all OR enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
+#if((enable-all OR enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
+if((enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
set(MGL_HAVE_U3D 1)
find_library(U3D_LIB IDTF)
if(NOT U3D_LIB)
@@ -133,11 +134,14 @@ if((enable-all OR enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
endif(NOT U3D_INCLUDE_DIR)
message(STATUS "Found U3D libraries at: ${U3D_LIB}")
message(STATUS "Found U3D headers: ${U3D_INCLUDE_DIR}")
+#else((enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
else((enable-all OR enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
set(MGL_HAVE_U3D 0)
-endif((enable-all OR enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
+#endif((enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
+endif((enable-u3d OR enable-pdf) AND (NOT enable-lgpl) )
-if((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
+#if((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
+if((enable-pdf) AND (NOT enable-lgpl) )
set(MGL_HAVE_PDF 1)
find_library(HPDF_LIB hpdf)
if(NOT HPDF_LIB)
@@ -149,9 +153,11 @@ if((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
endif(NOT HPDF_INCLUDE_DIR)
message(STATUS "Found libHaru library at: ${HPDF_LIB}")
message(STATUS "Found libHaru headers: ${HPDF_INCLUDE_DIR}")
-else((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
+#else((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
+else((enable-pdf) AND (NOT enable-lgpl) )
set(MGL_HAVE_PDF 0)
-endif((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
+#endif((enable-all OR enable-pdf) AND (NOT enable-lgpl) )
+endif((enable-pdf) AND (NOT enable-lgpl) )
if(enable-all OR enable-gif)
set(MGL_HAVE_GIF 1)
diff --git a/include/mgl/canvas_cf.h b/include/mgl/canvas_cf.h
index 56a2636..f432fa9 100644
--- a/include/mgl/canvas_cf.h
+++ b/include/mgl/canvas_cf.h
@@ -261,10 +261,10 @@ void mgl_zoom_(uintptr_t *graph, float *x1, float *y1, float *x2, float *y2);
void mgl_rotate_vector_(uintptr_t *graph, float *Tet,float *x,float *y,float *z);
void mgl_perspective_(uintptr_t *graph, float val);
/*****************************************************************************/
-int mgl_fortran_func(HMGL gr, void *);
-HMGL mgl_create_graph_qt(int (*draw)(HMGL gr, void *p), const char *title, void *par);
-HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, void *par);
+HMGL mgl_create_graph_qt(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p));
+HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p));
int mgl_fltk_run();
+int mgl_fltk_thr();
int mgl_qt_run();
/*****************************************************************************/
uintptr_t mgl_create_graph_qt_(const char *title, int);
diff --git a/include/mgl/canvas_wnd.h b/include/mgl/canvas_wnd.h
new file mode 100644
index 0000000..4c2d01e
--- /dev/null
+++ b/include/mgl/canvas_wnd.h
@@ -0,0 +1,75 @@
+/***************************************************************************
+ * window.h is part of Math Graphic Library
+ * Copyright (C) 2007 Alexey Balakin *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Library General Public License as *
+ * published by the Free Software Foundation; either version 3 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public *
+ * License along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+//-----------------------------------------------------------------------------
+#ifndef _MGL_CANVAS_WND_H_
+#define _MGL_CANVAS_WND_H_
+/*****************************************************************************/
+#include "mgl/window.h"
+//-----------------------------------------------------------------------------
+/// Base class for windows containing MathGL graphics
+class mglCanvasWnd : public mglCanvas
+{
+public:
+ mglCanvasWnd();
+ virtual ~mglCanvasWnd();
+
+ void SetSize(int w,int h);
+ void EndFrame();
+ const unsigned char *GetBits();
+ inline int GetNumFig() { return NumFig; }
+ inline int GetCurFig() { return CurFig; }
+ void SetCurFig(int c);
+ void ClearFrames();
+ inline mglPoint GetMousePos() { return LastMousePos;}
+ inline void SetMousePos(mglPoint p) { LastMousePos=p; }
+ inline void Setup(bool clf_upd=true, bool showpos=false)
+ { set(showpos,MGL_SHOW_POS); set(clf_upd,MGL_CLF_ON_UPD); }
+
+ virtual void ToggleAlpha()=0; ///< Switch on/off transparency (do not overwrite user settings)
+ virtual void ToggleLight()=0; ///< Switch on/off lighting (do not overwrite user settings)
+ virtual void ToggleZoom()=0; ///< Switch on/off zooming by mouse
+ virtual void ToggleRotate()=0; ///< Switch on/off rotation by mouse
+ virtual void ToggleNo()=0; ///< Switch off all zooming and rotation
+ virtual void Update()=0; ///< Update picture by calling user drawing function
+ virtual void Adjust()=0; ///< Adjust size of bitmap to window size
+ virtual void GotoFrame(int d)=0;///< Show arbitrary frame (use relative step)
+ virtual void NextFrame() {GotoFrame(+1);} ///< Show next frame (if one)
+ virtual void PrevFrame() {GotoFrame(-1);} ///< Show previous frame (if one)
+ virtual void Animation()=0; ///< Run slideshow (animation) of frames
+ void ReLoad(); ///< Reload user data and update picture
+ /// Create a window for plotting based on callback function (can be NULL).
+ virtual void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p),
+ const char *title, void *par=NULL,
+ void (*reload)(void *p)=NULL, bool maximize=false)=0;
+ void SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par=NULL, void (*reload)(void *p)=NULL);
+
+private:
+ mglPoint LastMousePos; ///< Last mouse position
+ int CurFig; ///< Current figure in the list.
+
+ unsigned char *GG; ///< images for all frames (may be too LARGE !!!)
+ int NumFig; ///< Number of figures in the list. If 0 then no list and mglCanvas::DrawFunc will called for each drawing.
+ void (*LoadFunc)(void *par);
+ void *FuncPar; ///< Parameters for drawing function mglCanvas::DrawFunc.
+ /// Drawing function for window procedure. It should return the number of frames.
+ int (*DrawFunc)(mglBase *gr, void *par);
+};
+//-----------------------------------------------------------------------------
+#endif
diff --git a/include/mgl/data.h b/include/mgl/data.h
index 866dc08..e377cac 100644
--- a/include/mgl/data.h
+++ b/include/mgl/data.h
@@ -21,281 +21,8 @@
#define _MGL_DATA_H_
/*****************************************************************************/
#include "mgl/base.h"
-/*****************************************************************************/
-#if MGL_HAVE_GSL
-#include
-#include
-#else
-struct gsl_vector;
-struct gsl_matrix;
-#endif
-/*****************************************************************************/
+#include "mgl/data_cf.h"
#ifdef __cplusplus
-extern "C" {
-#endif
-/*****************************************************************************/
-void mgl_srnd(long seed);
-double mgl_rnd();
-double mgl_ipow(double x,int n);
-/*****************************************************************************/
-HMDT mgl_create_data();
-HMDT mgl_create_data_size(long nx, long ny, long nz);
-HMDT mgl_create_data_file(const char *fname);
-void mgl_delete_data(HMDT dat);
-const char *mgl_data_info(HCDT dat);
-/*****************************************************************************/
-uintptr_t mgl_create_data_();
-uintptr_t mgl_create_data_size_(int *nx, int *ny, int *nz);
-uintptr_t mgl_create_data_file_(const char *fname, int len);
-void mgl_delete_data_(uintptr_t *dat);
-/*****************************************************************************/
-/* Data creation functions */
-/*****************************************************************************/
-void mgl_data_rearrange(HMDT dat, long mx,long my,long mz);
-void mgl_data_link(HMDT dat, mreal *A,long mx,long my,long mz);
-void mgl_data_set_float(HMDT dat, const float *A,long mx,long my,long mz);
-void mgl_data_set_double(HMDT dat, const double *A,long mx,long my,long mz);
-void mgl_data_set_float2(HMDT d, const float **A,long N1,long N2);
-void mgl_data_set_double2(HMDT d, const double **A,long N1,long N2);
-void mgl_data_set_float3(HMDT d, const float ***A,long N1,long N2,long N3);
-void mgl_data_set_double3(HMDT d, const double ***A,long N1,long N2,long N3);
-void mgl_data_set(HMDT dat, HCDT a);
-void mgl_data_set_vector(HMDT dat, gsl_vector *v);
-void mgl_data_set_matrix(HMDT dat, gsl_matrix *m);
-void mgl_data_set_value(HMDT dat, float v, long i, long j, long k);
-float mgl_data_get_value(HCDT dat, long i, long j, long k);
-void mgl_data_set_values(HMDT dat, const char *val, long nx, long ny, long nz);
-
-int mgl_data_read_hdf(HMDT d,const char *fname,const char *data);
-void mgl_data_save_hdf(HCDT d,const char *fname,const char *data,int rewrite);
-int mgl_datas_hdf(const char *fname, char *buf, long size);
-int mgl_data_read(HMDT dat, const char *fname);
-int mgl_data_read_mat(HMDT dat, const char *fname, long dim);
-int mgl_data_read_dim(HMDT dat, const char *fname,long mx,long my,long mz);
-int mgl_data_read_range(HMDT d, const char *templ, double from, double to, double step, int as_slice);
-int mgl_data_read_all(HMDT dat, const char *templ, int as_slice);
-void mgl_data_save(HCDT dat, const char *fname,long ns);
-void mgl_data_export(HCDT dat, const char *fname, const char *scheme,float v1,float v2,long ns);
-void mgl_data_import(HMDT dat, const char *fname, const char *scheme,float v1,float v2);
-
-void mgl_data_create(HMDT dat, long nx,long ny,long nz);
-void mgl_data_transpose(HMDT dat, const char *dim);
-void mgl_data_norm(HMDT dat, float v1,float v2,long sym,long dim);
-void mgl_data_norm_slice(HMDT dat, float v1,float v2,char dir,long keep_en,long sym);
-HMDT mgl_data_subdata(HCDT dat, long xx,long yy,long zz);
-HMDT mgl_data_subdata_ext(HCDT dat, HCDT xx, HCDT yy, HCDT zz);
-HMDT mgl_data_column(HCDT dat, const char *eq);
-void mgl_data_set_id(HMDT d, const char *id);
-void mgl_data_fill(HMDT dat, float x1,float x2,char dir);
-void mgl_data_fill_eq(HMGL gr, HMDT dat, const char *eq, HCDT vdat, HCDT wdat,const char *opt);
-void mgl_data_put_val(HMDT dat, mreal val, long i, long j, long k);
-void mgl_data_put_dat(HMDT dat, HCDT val, long i, long j, long k);
-void mgl_data_modify(HMDT dat, const char *eq,long dim);
-void mgl_data_modify_vw(HMDT dat, const char *eq,HCDT vdat,HCDT wdat);
-void mgl_data_squeeze(HMDT dat, long rx,long ry,long rz,long smooth);
-float mgl_data_max(HCDT dat);
-float mgl_data_min(HCDT dat);
-float *mgl_data_value(HMDT dat, long i,long j,long k);
-mreal *mgl_data_data(HMDT dat);
-
-float mgl_data_first(HCDT dat, const char *cond, long *i, long *j, long *k);
-float mgl_data_last(HCDT dat, const char *cond, long *i, long *j, long *k);
-long mgl_data_find(HCDT dat, const char *cond, char dir, long i, long j, long k);
-int mgl_data_find_any(HCDT dat, const char *cond);
-float mgl_data_max_int(HCDT dat, long *i, long *j, long *k);
-float mgl_data_max_real(HCDT dat, mreal *x, mreal *y, mreal *z);
-float mgl_data_min_int(HCDT dat, long *i, long *j, long *k);
-float mgl_data_min_real(HCDT dat, mreal *x, mreal *y, mreal *z);
-float mgl_data_momentum_val(HCDT d, char dir, mreal *m, mreal *w, mreal *s, mreal *k);
-
-HMDT mgl_data_combine(HCDT dat1, HCDT dat2);
-void mgl_data_extend(HMDT dat, long n1, long n2);
-void mgl_data_insert(HMDT dat, char dir, long at, long num);
-void mgl_data_delete(HMDT dat, char dir, long at, long num);
-/*****************************************************************************/
-/* Data manipulation functions */
-/*****************************************************************************/
-void mgl_data_smooth(HMDT d, const char *dirs, float delta);
-HMDT mgl_data_sum(HCDT dat, const char *dir);
-HMDT mgl_data_max_dir(HCDT dat, const char *dir);
-HMDT mgl_data_min_dir(HCDT dat, const char *dir);
-void mgl_data_cumsum(HMDT dat, const char *dir);
-void mgl_data_integral(HMDT dat, const char *dir);
-void mgl_data_diff(HMDT dat, const char *dir);
-void mgl_data_diff_par(HMDT dat, HCDT v1, HCDT v2, HCDT v3);
-void mgl_data_diff2(HMDT dat, const char *dir);
-void mgl_data_swap(HMDT dat, const char *dir);
-void mgl_data_roll(HMDT dat, char dir, long num);
-void mgl_data_mirror(HMDT dat, const char *dir);
-void mgl_data_sort(HMDT dat, long idx, long idy);
-
-void mgl_data_hankel(HMDT dat, const char *dir);
-void mgl_data_sinfft(HMDT dat, const char *dir);
-void mgl_data_cosfft(HMDT dat, const char *dir);
-void mgl_data_fill_sample(HMDT dat, const char *how);
-
-float mgl_data_spline(HCDT dat, float x,float y,float z);
-float mgl_data_linear(HCDT dat, float x,float y,float z);
-HMDT mgl_data_trace(HCDT d);
-HMDT mgl_data_resize(HCDT dat, long mx,long my,long mz);
-HMDT mgl_data_resize_box(HCDT dat, long mx,long my,long mz,float x1,float x2,float y1,float y2,float z1,float z2);
-HMDT mgl_data_hist(HCDT dat, long n, float v1, float v2, long nsub);
-HMDT mgl_data_hist_w(HCDT dat, HCDT weight, long n, float v1, float v2, long nsub);
-HMDT mgl_data_momentum(HCDT dat, char dir, const char *how);
-HMDT mgl_data_evaluate(HCDT dat, HCDT idat, HCDT jdat, HCDT kdat, int norm);
-void mgl_data_envelop(HMDT dat, char dir);
-void mgl_data_sew(HMDT dat, const char *dirs, float da);
-void mgl_data_crop(HMDT dat, long n1, long n2, char dir);
-/*****************************************************************************/
-/* Data operations */
-/*****************************************************************************/
-void mgl_data_mul_dat(HMDT dat, HCDT d);
-void mgl_data_div_dat(HMDT dat, HCDT d);
-void mgl_data_add_dat(HMDT dat, HCDT d);
-void mgl_data_sub_dat(HMDT dat, HCDT d);
-void mgl_data_mul_num(HMDT dat, float d);
-void mgl_data_div_num(HMDT dat, float d);
-void mgl_data_add_num(HMDT dat, float d);
-void mgl_data_sub_num(HMDT dat, float d);
-/*****************************************************************************/
-HMDT mgl_pde_solve(HMGL gr, const char *ham, HCDT ini_re, HCDT ini_im, float dz, float k0,const char *opt);
-HMDT mgl_qo2d_solve(const char *ham, HCDT ini_re, HCDT ini_im, HCDT ray, float r, float k0, HMDT xx, HMDT yy);
-HMDT mgl_ray_trace(const char *ham, float x0, float y0, float z0, float px, float py, float pz, float dt, float tmax);
-HMDT mgl_jacobian_2d(HCDT x, HCDT y);
-HMDT mgl_jacobian_3d(HCDT x, HCDT y, HCDT z);
-HMDT mgl_transform_a(HCDT am, HCDT ph, const char *tr);
-HMDT mgl_transform(HCDT re, HCDT im, const char *tr);
-void mgl_data_fourier(HMDT re, HMDT im, const char *dir);
-HMDT mgl_data_stfa(HCDT re, HCDT im, long dn, char dir);
-
-HMDT mgl_triangulation_3d(HCDT x, HCDT y, HCDT z, float er);
-HMDT mgl_triangulation_2d(HCDT x, HCDT y, float er);
-/*****************************************************************************/
-/* Data creation functions */
-/*****************************************************************************/
-void mgl_data_rearrange_(uintptr_t *dat, int *mx, int *my, int *mz);
-void mgl_data_set_float_(uintptr_t *dat, const float *A,int *NX,int *NY,int *NZ);
-void mgl_data_set_double_(uintptr_t *dat, const double *A,int *NX,int *NY,int *NZ);
-void mgl_data_set_float1_(uintptr_t *d, const float *A,int *N1);
-void mgl_data_set_double1_(uintptr_t *d, const double *A,int *N1);
-void mgl_data_set_float2_(uintptr_t *d, const float *A,int *N1,int *N2);
-void mgl_data_set_double2_(uintptr_t *d, const double *A,int *N1,int *N2);
-void mgl_data_set_float3_(uintptr_t *d, const float *A,int *N1,int *N2,int *N3);
-void mgl_data_set_double3_(uintptr_t *d, const double *A,int *N1,int *N2,int *N3);
-void mgl_data_set_(uintptr_t *dat, uintptr_t *a);
-
-void mgl_data_set_value_(uintptr_t *d, float *v, int *i, int *j, int *k);
-void mgl_data_set_values_(uintptr_t *d, const char *val, int *nx, int *ny, int *nz, int l);
-float mgl_data_get_value_(uintptr_t *d, int *i, int *j, int *k);
-int mgl_data_read_(uintptr_t *d, const char *fname,int l);
-int mgl_data_read_mat_(uintptr_t *dat, const char *fname, int *dim, int);
-int mgl_data_read_dim_(uintptr_t *dat, const char *fname,int *mx,int *my,int *mz,int);
-void mgl_data_save_(uintptr_t *dat, const char *fname,int *ns,int);
-void mgl_data_export_(uintptr_t *dat, const char *fname, const char *scheme,float *v1,float *v2,int *ns,int,int);
-void mgl_data_import_(uintptr_t *dat, const char *fname, const char *scheme,float *v1,float *v2,int,int);
-void mgl_data_create_(uintptr_t *dat, int *nx,int *ny,int *nz);
-void mgl_data_transpose_(uintptr_t *dat, const char *dim,int);
-void mgl_data_norm_(uintptr_t *dat, float *v1,float *v2,int *sym,int *dim);
-void mgl_data_norm_slice_(uintptr_t *dat, float *v1,float *v2,char *dir,int *keep_en,int *sym,int l);
-uintptr_t mgl_data_subdata_(uintptr_t *dat, int *xx,int *yy,int *zz);
-uintptr_t mgl_data_subdata_ext_(uintptr_t *dat, uintptr_t *xx,uintptr_t *yy,uintptr_t *zz);
-uintptr_t mgl_data_column_(uintptr_t *dat, const char *eq,int l);
-void mgl_data_set_id_(uintptr_t *dat, const char *id,int l);
-void mgl_data_fill_(uintptr_t *dat, float *x1,float *x2,const char *dir,int);
-void mgl_data_fill_eq_(uintptr_t *gr, uintptr_t *dat, const char *eq, uintptr_t *vdat, uintptr_t *wdat,const char *opt, int, int);
-void mgl_data_put_val_(uintptr_t *dat, float *val, int *i, int *j, int *k);
-void mgl_data_put_dat_(uintptr_t *dat, uintptr_t *val, int *i, int *j, int *k);
-void mgl_data_modify_(uintptr_t *dat, const char *eq,int *dim,int);
-void mgl_data_modify_vw_(uintptr_t *dat, const char *eq, uintptr_t *vdat, uintptr_t *wdat,int);
-void mgl_data_squeeze_(uintptr_t *dat, int *rx,int *ry,int *rz,int *smooth);
-float mgl_data_max_(uintptr_t *dat);
-float mgl_data_min_(uintptr_t *dat);
-
-float mgl_data_first_(uintptr_t *dat, const char *cond, int *i, int *j, int *k, int);
-float mgl_data_last_(uintptr_t *dat, const char *cond, int *i, int *j, int *k, int);
-int mgl_data_find_(uintptr_t *dat, const char *cond, char *dir, int *i, int *j, int *k, int,int);
-int mgl_data_find_any_(uintptr_t *dat, const char *cond, int);
-float mgl_data_max_int_(uintptr_t *dat, int *i, int *j, int *k);
-float mgl_data_max_real_(uintptr_t *dat, float *x, float *y, float *z);
-float mgl_data_min_int_(uintptr_t *dat, int *i, int *j, int *k);
-float mgl_data_min_real_(uintptr_t *dat, float *x, float *y, float *z);
-float mgl_data_momentum_val_(uintptr_t *dat, char *dir, float *m, float *w, float *s, float *k,int);
-
-uintptr_t mgl_data_combine_(uintptr_t *dat1, uintptr_t *dat2);
-void mgl_data_extend_(uintptr_t *dat, int *n1, int *n2);
-void mgl_data_insert_(uintptr_t *dat, const char *dir, int *at, int *num, int);
-void mgl_data_delete_(uintptr_t *dat, const char *dir, int *at, int *num, int);
-/*****************************************************************************/
-/* Data manipulation functions */
-/*****************************************************************************/
-void mgl_data_smooth_(uintptr_t *dat, const char *dirs, float *delta,int);
-uintptr_t mgl_data_sum_(uintptr_t *dat, const char *dir,int);
-uintptr_t mgl_data_max_dir_(uintptr_t *dat, const char *dir,int);
-uintptr_t mgl_data_min_dir_(uintptr_t *dat, const char *dir,int);
-void mgl_data_cumsum_(uintptr_t *dat, const char *dir,int);
-void mgl_data_integral_(uintptr_t *dat, const char *dir,int);
-void mgl_data_diff_(uintptr_t *dat, const char *dir,int);
-void mgl_data_diff_par_(uintptr_t *dat, uintptr_t *v1, uintptr_t *v2, uintptr_t *v3);
-void mgl_data_diff2_(uintptr_t *dat, const char *dir,int);
-void mgl_data_swap_(uintptr_t *dat, const char *dir,int);
-void mgl_data_roll_(uintptr_t *dat, const char *dir, int *num, int);
-void mgl_data_mirror_(uintptr_t *dat, const char *dir,int);
-void mgl_data_sort_(uintptr_t *dat, int *idx, int *idy);
-
-void mgl_data_hankel_(uintptr_t *dat, const char *dir,int);
-void mgl_data_sinfft_(uintptr_t *dat, const char *dir,int);
-void mgl_data_cosfft_(uintptr_t *dat, const char *dir,int);
-void mgl_data_fill_sample_(uintptr_t *dat, const char *how,int);
-
-float mgl_data_spline_(uintptr_t *dat, float *x,float *y,float *z);
-float mgl_data_linear_(uintptr_t *dat, float *x,float *y,float *z);
-uintptr_t mgl_data_trace_(uintptr_t *d);
-uintptr_t mgl_data_resize_(uintptr_t *dat, int *mx,int *my,int *mz);
-uintptr_t mgl_data_resize_box_(uintptr_t *dat, int *mx,int *my,int *mz,float *x1,float *x2,float *y1,float *y2,float *z1,float *z2);
-uintptr_t mgl_data_momentum_(uintptr_t *dat, char *dir, const char *how, int,int);
-uintptr_t mgl_data_hist_(uintptr_t *dat, int *n, float *v1, float *v2, int *nsub);
-uintptr_t mgl_data_hist_w_(uintptr_t *dat, uintptr_t *weight, int *n, float *v1, float *v2, int *nsub);
-uintptr_t mgl_data_evaluate_(uintptr_t *dat, uintptr_t *idat, uintptr_t *jdat, uintptr_t *kdat, int *norm);
-void mgl_data_envelop_(uintptr_t *dat, const char *dir, int);
-void mgl_data_sew_(uintptr_t *dat, const char *dirs, float *da, int);
-void mgl_data_crop_(uintptr_t *dat, int *n1, int *n2, const char *dir,int);
-/*****************************************************************************/
-/* Data operations */
-/*****************************************************************************/
-void mgl_data_mul_dat_(uintptr_t *dat, uintptr_t *d);
-void mgl_data_div_dat_(uintptr_t *dat, uintptr_t *d);
-void mgl_data_add_dat_(uintptr_t *dat, uintptr_t *d);
-void mgl_data_sub_dat_(uintptr_t *dat, uintptr_t *d);
-void mgl_data_mul_num_(uintptr_t *dat, float *d);
-void mgl_data_div_num_(uintptr_t *dat, float *d);
-void mgl_data_add_num_(uintptr_t *dat, float *d);
-void mgl_data_sub_num_(uintptr_t *dat, float *d);
-/*****************************************************************************/
-/* Nonlinear fitting */
-/*****************************************************************************/
-uintptr_t mgl_pde_solve_(uintptr_t* gr, const char *ham, uintptr_t* ini_re, uintptr_t* ini_im, float *dz, float *k0,const char *opt,int,int);
-uintptr_t mgl_qo2d_solve_(const char *ham, uintptr_t* ini_re, uintptr_t* ini_im, uintptr_t* ray, float *r, float *k0, uintptr_t* xx, uintptr_t* yy, int);
-uintptr_t mgl_ray_trace_(const char *ham, float *x0, float *y0, float *z0, float *px, float *py, float *pz, float *dt, float *tmax,int);
-uintptr_t mgl_jacobian_2d_(uintptr_t* x, uintptr_t* y);
-uintptr_t mgl_jacobian_3d_(uintptr_t* x, uintptr_t* y, uintptr_t* z);
-
-uintptr_t mgl_transform_a_(uintptr_t *am, uintptr_t *ph, const char *tr, int);
-uintptr_t mgl_transform_(uintptr_t *re, uintptr_t *im, const char *tr, int);
-void mgl_data_fourier_(uintptr_t *re, uintptr_t *im, const char *dir, int l);
-uintptr_t mgl_data_stfa_(uintptr_t *re, uintptr_t *im, int *dn, char *dir, int);
-
-uintptr_t mgl_triangulation_3d_(uintptr_t *x, uintptr_t *y, uintptr_t *z, float *er);
-uintptr_t mgl_triangulation_2d_(uintptr_t *x, uintptr_t *y, float *er);
-/*****************************************************************************/
-int mgl_data_read_hdf_(uintptr_t *d, const char *fname, const char *data,int l,int n);
-void mgl_data_link_(uintptr_t *d, float *A, int *nx,int *ny,int *nz);
-void mgl_data_save_hdf_(uintptr_t *d, const char *fname, const char *data, int *rewrite,int l,int n);
-int mgl_data_read_range_(uintptr_t *d, const char *fname, double *from, double *to, double *step, int *as_slice,int l);
-int mgl_data_read_all_(uintptr_t *d, const char *fname, int *as_slice,int l);
-
-/*****************************************************************************/
-#ifdef __cplusplus
-}
//-----------------------------------------------------------------------------
#include
//-----------------------------------------------------------------------------
@@ -425,7 +152,7 @@ public:
inline void Fill(mglBase *gr, const char *eq, const mglData &vdat, const mglData &wdat,const char *opt="")
{ mgl_data_fill_eq(gr,this,eq,&vdat,&wdat,opt); }
/// Eqidistantly fill the data to range [x1,x2] in direction \a dir
- inline void Fill(mreal x1,mreal x2=NAN,char dir='x')
+ inline void Fill(mreal x1,mreal x2=NaN,char dir='x')
{ return mgl_data_fill(this,x1,x2,dir); }
/// Put value to data element(s)
inline void Put(mreal val, long i=-1, long j=-1, long k=-1)
@@ -545,7 +272,7 @@ public:
inline void Envelop(char dir='x')
{ mgl_data_envelop(this,dir); }
/// Remove phase jump
- inline void Sew(const char *dirs="xyz", mreal da=2*M_PI)
+ inline void Sew(const char *dirs="xyz", mreal da=2*Pi)
{ mgl_data_sew(this,dirs,da); }
/// Smooth the data on specified direction or directions
inline void Smooth(const char *dirs="xyz",mreal delta=0)
@@ -641,9 +368,11 @@ public:
inline void operator+=(mreal d) { mgl_data_add_num(this,d); }
/// Substract the number
inline void operator-=(mreal d) { mgl_data_sub_num(this,d); }
+#ifndef SWIG
/// Direct access to the data cell
inline mreal &operator[](long i) { return a[i]; }
// NOTE see 13.10 for operator(), operator[] -- m.b. I should add it ???
+#endif
protected:
/// Get the value in given cell of the data without border checking
inline mreal v(long i,long j=0,long k=0) const
@@ -666,6 +395,7 @@ protected:
return k>0? (k *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU Library General Public License as *
+ * published by the Free Software Foundation; either version 3 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public *
+ * License along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+#ifndef _MGL_DATA_CF_H_
+#define _MGL_DATA_CF_H_
+/*****************************************************************************/
+#include "mgl/base.h"
+/*****************************************************************************/
+#if MGL_HAVE_GSL
+#include
+#include
+#else
+struct gsl_vector;
+struct gsl_matrix;
+#endif
+/*****************************************************************************/
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*****************************************************************************/
+void mgl_srnd(long seed);
+double mgl_rnd();
+double mgl_ipow(double x,int n);
+/*****************************************************************************/
+HMDT mgl_create_data();
+HMDT mgl_create_data_size(long nx, long ny, long nz);
+HMDT mgl_create_data_file(const char *fname);
+void mgl_delete_data(HMDT dat);
+const char *mgl_data_info(HCDT dat);
+/*****************************************************************************/
+uintptr_t mgl_create_data_();
+uintptr_t mgl_create_data_size_(int *nx, int *ny, int *nz);
+uintptr_t mgl_create_data_file_(const char *fname, int len);
+void mgl_delete_data_(uintptr_t *dat);
+/*****************************************************************************/
+/* Data creation functions */
+/*****************************************************************************/
+void mgl_data_rearrange(HMDT dat, long mx,long my,long mz);
+void mgl_data_link(HMDT dat, mreal *A,long mx,long my,long mz);
+void mgl_data_set_float(HMDT dat, const float *A,long mx,long my,long mz);
+void mgl_data_set_double(HMDT dat, const double *A,long mx,long my,long mz);
+void mgl_data_set_float2(HMDT d, const float **A,long N1,long N2);
+void mgl_data_set_double2(HMDT d, const double **A,long N1,long N2);
+void mgl_data_set_float3(HMDT d, const float ***A,long N1,long N2,long N3);
+void mgl_data_set_double3(HMDT d, const double ***A,long N1,long N2,long N3);
+void mgl_data_set(HMDT dat, HCDT a);
+void mgl_data_set_vector(HMDT dat, gsl_vector *v);
+void mgl_data_set_matrix(HMDT dat, gsl_matrix *m);
+void mgl_data_set_value(HMDT dat, float v, long i, long j, long k);
+float mgl_data_get_value(HCDT dat, long i, long j, long k);
+void mgl_data_set_values(HMDT dat, const char *val, long nx, long ny, long nz);
+
+int mgl_data_read_hdf(HMDT d,const char *fname,const char *data);
+void mgl_data_save_hdf(HCDT d,const char *fname,const char *data,int rewrite);
+int mgl_datas_hdf(const char *fname, char *buf, long size);
+int mgl_data_read(HMDT dat, const char *fname);
+int mgl_data_read_mat(HMDT dat, const char *fname, long dim);
+int mgl_data_read_dim(HMDT dat, const char *fname,long mx,long my,long mz);
+int mgl_data_read_range(HMDT d, const char *templ, double from, double to, double step, int as_slice);
+int mgl_data_read_all(HMDT dat, const char *templ, int as_slice);
+void mgl_data_save(HCDT dat, const char *fname,long ns);
+void mgl_data_export(HCDT dat, const char *fname, const char *scheme,float v1,float v2,long ns);
+void mgl_data_import(HMDT dat, const char *fname, const char *scheme,float v1,float v2);
+
+void mgl_data_create(HMDT dat, long nx,long ny,long nz);
+void mgl_data_transpose(HMDT dat, const char *dim);
+void mgl_data_norm(HMDT dat, float v1,float v2,long sym,long dim);
+void mgl_data_norm_slice(HMDT dat, float v1,float v2,char dir,long keep_en,long sym);
+HMDT mgl_data_subdata(HCDT dat, long xx,long yy,long zz);
+HMDT mgl_data_subdata_ext(HCDT dat, HCDT xx, HCDT yy, HCDT zz);
+HMDT mgl_data_column(HCDT dat, const char *eq);
+void mgl_data_set_id(HMDT d, const char *id);
+void mgl_data_fill(HMDT dat, float x1,float x2,char dir);
+void mgl_data_fill_eq(HMGL gr, HMDT dat, const char *eq, HCDT vdat, HCDT wdat,const char *opt);
+void mgl_data_put_val(HMDT dat, mreal val, long i, long j, long k);
+void mgl_data_put_dat(HMDT dat, HCDT val, long i, long j, long k);
+void mgl_data_modify(HMDT dat, const char *eq,long dim);
+void mgl_data_modify_vw(HMDT dat, const char *eq,HCDT vdat,HCDT wdat);
+void mgl_data_squeeze(HMDT dat, long rx,long ry,long rz,long smooth);
+float mgl_data_max(HCDT dat);
+float mgl_data_min(HCDT dat);
+mreal *mgl_data_value(HMDT dat, long i,long j,long k);
+mreal *mgl_data_data(HMDT dat);
+
+float mgl_data_first(HCDT dat, const char *cond, long *i, long *j, long *k);
+float mgl_data_last(HCDT dat, const char *cond, long *i, long *j, long *k);
+long mgl_data_find(HCDT dat, const char *cond, char dir, long i, long j, long k);
+int mgl_data_find_any(HCDT dat, const char *cond);
+float mgl_data_max_int(HCDT dat, long *i, long *j, long *k);
+float mgl_data_max_real(HCDT dat, mreal *x, mreal *y, mreal *z);
+float mgl_data_min_int(HCDT dat, long *i, long *j, long *k);
+float mgl_data_min_real(HCDT dat, mreal *x, mreal *y, mreal *z);
+float mgl_data_momentum_val(HCDT d, char dir, mreal *m, mreal *w, mreal *s, mreal *k);
+
+HMDT mgl_data_combine(HCDT dat1, HCDT dat2);
+void mgl_data_extend(HMDT dat, long n1, long n2);
+void mgl_data_insert(HMDT dat, char dir, long at, long num);
+void mgl_data_delete(HMDT dat, char dir, long at, long num);
+/*****************************************************************************/
+/* Data manipulation functions */
+/*****************************************************************************/
+void mgl_data_smooth(HMDT d, const char *dirs, float delta);
+HMDT mgl_data_sum(HCDT dat, const char *dir);
+HMDT mgl_data_max_dir(HCDT dat, const char *dir);
+HMDT mgl_data_min_dir(HCDT dat, const char *dir);
+void mgl_data_cumsum(HMDT dat, const char *dir);
+void mgl_data_integral(HMDT dat, const char *dir);
+void mgl_data_diff(HMDT dat, const char *dir);
+void mgl_data_diff_par(HMDT dat, HCDT v1, HCDT v2, HCDT v3);
+void mgl_data_diff2(HMDT dat, const char *dir);
+void mgl_data_swap(HMDT dat, const char *dir);
+void mgl_data_roll(HMDT dat, char dir, long num);
+void mgl_data_mirror(HMDT dat, const char *dir);
+void mgl_data_sort(HMDT dat, long idx, long idy);
+
+void mgl_data_hankel(HMDT dat, const char *dir);
+void mgl_data_sinfft(HMDT dat, const char *dir);
+void mgl_data_cosfft(HMDT dat, const char *dir);
+void mgl_data_fill_sample(HMDT dat, const char *how);
+
+float mgl_data_spline(HCDT dat, float x,float y,float z);
+float mgl_data_linear(HCDT dat, float x,float y,float z);
+HMDT mgl_data_trace(HCDT d);
+HMDT mgl_data_resize(HCDT dat, long mx,long my,long mz);
+HMDT mgl_data_resize_box(HCDT dat, long mx,long my,long mz,float x1,float x2,float y1,float y2,float z1,float z2);
+HMDT mgl_data_hist(HCDT dat, long n, float v1, float v2, long nsub);
+HMDT mgl_data_hist_w(HCDT dat, HCDT weight, long n, float v1, float v2, long nsub);
+HMDT mgl_data_momentum(HCDT dat, char dir, const char *how);
+HMDT mgl_data_evaluate(HCDT dat, HCDT idat, HCDT jdat, HCDT kdat, int norm);
+void mgl_data_envelop(HMDT dat, char dir);
+void mgl_data_sew(HMDT dat, const char *dirs, float da);
+void mgl_data_crop(HMDT dat, long n1, long n2, char dir);
+/*****************************************************************************/
+/* Data operations */
+/*****************************************************************************/
+void mgl_data_mul_dat(HMDT dat, HCDT d);
+void mgl_data_div_dat(HMDT dat, HCDT d);
+void mgl_data_add_dat(HMDT dat, HCDT d);
+void mgl_data_sub_dat(HMDT dat, HCDT d);
+void mgl_data_mul_num(HMDT dat, float d);
+void mgl_data_div_num(HMDT dat, float d);
+void mgl_data_add_num(HMDT dat, float d);
+void mgl_data_sub_num(HMDT dat, float d);
+/*****************************************************************************/
+HMDT mgl_pde_solve(HMGL gr, const char *ham, HCDT ini_re, HCDT ini_im, float dz, float k0,const char *opt);
+HMDT mgl_qo2d_solve(const char *ham, HCDT ini_re, HCDT ini_im, HCDT ray, float r, float k0, HMDT xx, HMDT yy);
+HMDT mgl_ray_trace(const char *ham, float x0, float y0, float z0, float px, float py, float pz, float dt, float tmax);
+HMDT mgl_jacobian_2d(HCDT x, HCDT y);
+HMDT mgl_jacobian_3d(HCDT x, HCDT y, HCDT z);
+HMDT mgl_transform_a(HCDT am, HCDT ph, const char *tr);
+HMDT mgl_transform(HCDT re, HCDT im, const char *tr);
+void mgl_data_fourier(HMDT re, HMDT im, const char *dir);
+HMDT mgl_data_stfa(HCDT re, HCDT im, long dn, char dir);
+
+HMDT mgl_triangulation_3d(HCDT x, HCDT y, HCDT z, float er);
+HMDT mgl_triangulation_2d(HCDT x, HCDT y, float er);
+/*****************************************************************************/
+/* Data creation functions */
+/*****************************************************************************/
+void mgl_data_rearrange_(uintptr_t *dat, int *mx, int *my, int *mz);
+void mgl_data_set_float_(uintptr_t *dat, const float *A,int *NX,int *NY,int *NZ);
+void mgl_data_set_double_(uintptr_t *dat, const double *A,int *NX,int *NY,int *NZ);
+void mgl_data_set_float1_(uintptr_t *d, const float *A,int *N1);
+void mgl_data_set_double1_(uintptr_t *d, const double *A,int *N1);
+void mgl_data_set_float2_(uintptr_t *d, const float *A,int *N1,int *N2);
+void mgl_data_set_double2_(uintptr_t *d, const double *A,int *N1,int *N2);
+void mgl_data_set_float3_(uintptr_t *d, const float *A,int *N1,int *N2,int *N3);
+void mgl_data_set_double3_(uintptr_t *d, const double *A,int *N1,int *N2,int *N3);
+void mgl_data_set_(uintptr_t *dat, uintptr_t *a);
+
+void mgl_data_set_value_(uintptr_t *d, float *v, int *i, int *j, int *k);
+void mgl_data_set_values_(uintptr_t *d, const char *val, int *nx, int *ny, int *nz, int l);
+float mgl_data_get_value_(uintptr_t *d, int *i, int *j, int *k);
+int mgl_data_read_(uintptr_t *d, const char *fname,int l);
+int mgl_data_read_mat_(uintptr_t *dat, const char *fname, int *dim, int);
+int mgl_data_read_dim_(uintptr_t *dat, const char *fname,int *mx,int *my,int *mz,int);
+void mgl_data_save_(uintptr_t *dat, const char *fname,int *ns,int);
+void mgl_data_export_(uintptr_t *dat, const char *fname, const char *scheme,float *v1,float *v2,int *ns,int,int);
+void mgl_data_import_(uintptr_t *dat, const char *fname, const char *scheme,float *v1,float *v2,int,int);
+void mgl_data_create_(uintptr_t *dat, int *nx,int *ny,int *nz);
+void mgl_data_transpose_(uintptr_t *dat, const char *dim,int);
+void mgl_data_norm_(uintptr_t *dat, float *v1,float *v2,int *sym,int *dim);
+void mgl_data_norm_slice_(uintptr_t *dat, float *v1,float *v2,char *dir,int *keep_en,int *sym,int l);
+uintptr_t mgl_data_subdata_(uintptr_t *dat, int *xx,int *yy,int *zz);
+uintptr_t mgl_data_subdata_ext_(uintptr_t *dat, uintptr_t *xx,uintptr_t *yy,uintptr_t *zz);
+uintptr_t mgl_data_column_(uintptr_t *dat, const char *eq,int l);
+void mgl_data_set_id_(uintptr_t *dat, const char *id,int l);
+void mgl_data_fill_(uintptr_t *dat, float *x1,float *x2,const char *dir,int);
+void mgl_data_fill_eq_(uintptr_t *gr, uintptr_t *dat, const char *eq, uintptr_t *vdat, uintptr_t *wdat,const char *opt, int, int);
+void mgl_data_put_val_(uintptr_t *dat, float *val, int *i, int *j, int *k);
+void mgl_data_put_dat_(uintptr_t *dat, uintptr_t *val, int *i, int *j, int *k);
+void mgl_data_modify_(uintptr_t *dat, const char *eq,int *dim,int);
+void mgl_data_modify_vw_(uintptr_t *dat, const char *eq, uintptr_t *vdat, uintptr_t *wdat,int);
+void mgl_data_squeeze_(uintptr_t *dat, int *rx,int *ry,int *rz,int *smooth);
+float mgl_data_max_(uintptr_t *dat);
+float mgl_data_min_(uintptr_t *dat);
+
+float mgl_data_first_(uintptr_t *dat, const char *cond, int *i, int *j, int *k, int);
+float mgl_data_last_(uintptr_t *dat, const char *cond, int *i, int *j, int *k, int);
+int mgl_data_find_(uintptr_t *dat, const char *cond, char *dir, int *i, int *j, int *k, int,int);
+int mgl_data_find_any_(uintptr_t *dat, const char *cond, int);
+float mgl_data_max_int_(uintptr_t *dat, int *i, int *j, int *k);
+float mgl_data_max_real_(uintptr_t *dat, float *x, float *y, float *z);
+float mgl_data_min_int_(uintptr_t *dat, int *i, int *j, int *k);
+float mgl_data_min_real_(uintptr_t *dat, float *x, float *y, float *z);
+float mgl_data_momentum_val_(uintptr_t *dat, char *dir, float *m, float *w, float *s, float *k,int);
+
+uintptr_t mgl_data_combine_(uintptr_t *dat1, uintptr_t *dat2);
+void mgl_data_extend_(uintptr_t *dat, int *n1, int *n2);
+void mgl_data_insert_(uintptr_t *dat, const char *dir, int *at, int *num, int);
+void mgl_data_delete_(uintptr_t *dat, const char *dir, int *at, int *num, int);
+/*****************************************************************************/
+/* Data manipulation functions */
+/*****************************************************************************/
+void mgl_data_smooth_(uintptr_t *dat, const char *dirs, float *delta,int);
+uintptr_t mgl_data_sum_(uintptr_t *dat, const char *dir,int);
+uintptr_t mgl_data_max_dir_(uintptr_t *dat, const char *dir,int);
+uintptr_t mgl_data_min_dir_(uintptr_t *dat, const char *dir,int);
+void mgl_data_cumsum_(uintptr_t *dat, const char *dir,int);
+void mgl_data_integral_(uintptr_t *dat, const char *dir,int);
+void mgl_data_diff_(uintptr_t *dat, const char *dir,int);
+void mgl_data_diff_par_(uintptr_t *dat, uintptr_t *v1, uintptr_t *v2, uintptr_t *v3);
+void mgl_data_diff2_(uintptr_t *dat, const char *dir,int);
+void mgl_data_swap_(uintptr_t *dat, const char *dir,int);
+void mgl_data_roll_(uintptr_t *dat, const char *dir, int *num, int);
+void mgl_data_mirror_(uintptr_t *dat, const char *dir,int);
+void mgl_data_sort_(uintptr_t *dat, int *idx, int *idy);
+
+void mgl_data_hankel_(uintptr_t *dat, const char *dir,int);
+void mgl_data_sinfft_(uintptr_t *dat, const char *dir,int);
+void mgl_data_cosfft_(uintptr_t *dat, const char *dir,int);
+void mgl_data_fill_sample_(uintptr_t *dat, const char *how,int);
+
+float mgl_data_spline_(uintptr_t *dat, float *x,float *y,float *z);
+float mgl_data_linear_(uintptr_t *dat, float *x,float *y,float *z);
+uintptr_t mgl_data_trace_(uintptr_t *d);
+uintptr_t mgl_data_resize_(uintptr_t *dat, int *mx,int *my,int *mz);
+uintptr_t mgl_data_resize_box_(uintptr_t *dat, int *mx,int *my,int *mz,float *x1,float *x2,float *y1,float *y2,float *z1,float *z2);
+uintptr_t mgl_data_momentum_(uintptr_t *dat, char *dir, const char *how, int,int);
+uintptr_t mgl_data_hist_(uintptr_t *dat, int *n, float *v1, float *v2, int *nsub);
+uintptr_t mgl_data_hist_w_(uintptr_t *dat, uintptr_t *weight, int *n, float *v1, float *v2, int *nsub);
+uintptr_t mgl_data_evaluate_(uintptr_t *dat, uintptr_t *idat, uintptr_t *jdat, uintptr_t *kdat, int *norm);
+void mgl_data_envelop_(uintptr_t *dat, const char *dir, int);
+void mgl_data_sew_(uintptr_t *dat, const char *dirs, float *da, int);
+void mgl_data_crop_(uintptr_t *dat, int *n1, int *n2, const char *dir,int);
+/*****************************************************************************/
+/* Data operations */
+/*****************************************************************************/
+void mgl_data_mul_dat_(uintptr_t *dat, uintptr_t *d);
+void mgl_data_div_dat_(uintptr_t *dat, uintptr_t *d);
+void mgl_data_add_dat_(uintptr_t *dat, uintptr_t *d);
+void mgl_data_sub_dat_(uintptr_t *dat, uintptr_t *d);
+void mgl_data_mul_num_(uintptr_t *dat, float *d);
+void mgl_data_div_num_(uintptr_t *dat, float *d);
+void mgl_data_add_num_(uintptr_t *dat, float *d);
+void mgl_data_sub_num_(uintptr_t *dat, float *d);
+/*****************************************************************************/
+/* Nonlinear fitting */
+/*****************************************************************************/
+uintptr_t mgl_pde_solve_(uintptr_t* gr, const char *ham, uintptr_t* ini_re, uintptr_t* ini_im, float *dz, float *k0,const char *opt,int,int);
+uintptr_t mgl_qo2d_solve_(const char *ham, uintptr_t* ini_re, uintptr_t* ini_im, uintptr_t* ray, float *r, float *k0, uintptr_t* xx, uintptr_t* yy, int);
+uintptr_t mgl_ray_trace_(const char *ham, float *x0, float *y0, float *z0, float *px, float *py, float *pz, float *dt, float *tmax,int);
+uintptr_t mgl_jacobian_2d_(uintptr_t* x, uintptr_t* y);
+uintptr_t mgl_jacobian_3d_(uintptr_t* x, uintptr_t* y, uintptr_t* z);
+
+uintptr_t mgl_transform_a_(uintptr_t *am, uintptr_t *ph, const char *tr, int);
+uintptr_t mgl_transform_(uintptr_t *re, uintptr_t *im, const char *tr, int);
+void mgl_data_fourier_(uintptr_t *re, uintptr_t *im, const char *dir, int l);
+uintptr_t mgl_data_stfa_(uintptr_t *re, uintptr_t *im, int *dn, char *dir, int);
+
+uintptr_t mgl_triangulation_3d_(uintptr_t *x, uintptr_t *y, uintptr_t *z, float *er);
+uintptr_t mgl_triangulation_2d_(uintptr_t *x, uintptr_t *y, float *er);
+/*****************************************************************************/
+int mgl_data_read_hdf_(uintptr_t *d, const char *fname, const char *data,int l,int n);
+void mgl_data_link_(uintptr_t *d, float *A, int *nx,int *ny,int *nz);
+void mgl_data_save_hdf_(uintptr_t *d, const char *fname, const char *data, int *rewrite,int l,int n);
+int mgl_data_read_range_(uintptr_t *d, const char *fname, double *from, double *to, double *step, int *as_slice,int l);
+int mgl_data_read_all_(uintptr_t *d, const char *fname, int *as_slice,int l);
+/*****************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/include/mgl/fltk.h b/include/mgl/fltk.h
index 84441f7..72abf46 100644
--- a/include/mgl/fltk.h
+++ b/include/mgl/fltk.h
@@ -22,7 +22,7 @@
#define _MGL_FLTK_H_
/*****************************************************************************/
#ifdef __cplusplus
-#include "mgl/window.h"
+#include "mgl/canvas_wnd.h"
//-----------------------------------------------------------------------------
#ifdef __MWERKS__
# define FL_DLL
@@ -76,7 +76,7 @@ public:
{ popup = pmenu; wpar = wdg; vpar = v; }
protected:
mglCanvas *gr; ///< pointer to grapher
- void *draw_par; ///< Parameters for drawing function mglCanvasW::DrawFunc.
+ void *draw_par; ///< Parameters for drawing function mglCanvasWnd::DrawFunc.
/// Drawing function for window procedure. It should return the number of frames.
int (*draw_func)(mglBase *gr, void *par);
@@ -136,10 +136,10 @@ protected:
//-----------------------------------------------------------------------------
/// Class allows the window creation for displaying plot bitmap with the help of FLTK library
/** NOTE!!! All frames are saved in memory. So animation with many frames require a lot memory and CPU time (for example, for mouse rotation).*/
-class mglCanvasFL : public mglCanvasW
+class mglCanvasFL : public mglCanvasWnd
{
public:
-using mglCanvasW::Window;
+using mglCanvasWnd::Window;
Fl_Window *Wnd; ///< Pointer to window
Fl_MGLView *mgl; ///< Pointer to MGL widget with buttons
diff --git a/include/mgl/glut.h b/include/mgl/glut.h
index 558bfeb..aea0bc6 100644
--- a/include/mgl/glut.h
+++ b/include/mgl/glut.h
@@ -29,8 +29,6 @@ extern "C" {
/*****************************************************************************/
void _mgl_key_up(unsigned char ch,int ,int );
HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, void *par);
-/*int mgl_fortran_func(HMGL gr, void *);
-uintptr_t mgl_create_graph_glut_(const char *title, int);*/
/*****************************************************************************/
#ifdef __cplusplus
}
diff --git a/include/mgl/mgl.h b/include/mgl/mgl.h
index 4f9d536..a3ffb65 100644
--- a/include/mgl/mgl.h
+++ b/include/mgl/mgl.h
@@ -27,8 +27,6 @@
#include "mgl/opengl.h"
#endif
//-----------------------------------------------------------------------------
-const float NaN = NAN;
-//-----------------------------------------------------------------------------
/// Wrapper class for all graphics
class mglGraph
{
@@ -1135,12 +1133,14 @@ public:
~mglExpr() { mgl_delete_expr(ex); }
inline mreal Eval(mreal x, mreal y=0, mreal z=0)
{ return mgl_expr_eval(ex,x,y,z); }
- inline mreal Eval(mreal var[26])
- { return mgl_expr_eval_v(ex,var); }
inline mreal Diff(char dir, mreal x, mreal y=0, mreal z=0)
{ return mgl_expr_diff(ex,dir, x,y,z); }
+#ifndef SWIG
+ inline mreal Eval(mreal var[26])
+ { return mgl_expr_eval_v(ex,var); }
inline mreal Diff(char dir, mreal var[26])
{ return mgl_expr_diff_v(ex,dir, var); }
+#endif
};
//-----------------------------------------------------------------------------
#endif
diff --git a/include/mgl/mgl_cf.h b/include/mgl/mgl_cf.h
index b4a37c0..7f69fef 100644
--- a/include/mgl/mgl_cf.h
+++ b/include/mgl/mgl_cf.h
@@ -21,7 +21,7 @@
#define _MGL_CF_H_
/*****************************************************************************/
#include "mgl/base_cf.h"
-#include "mgl/data.h"
+#include "mgl/data_cf.h"
#include "mgl/cont.h"
#include "mgl/fit.h"
#include "mgl/plot.h"
diff --git a/include/mgl/qt.h b/include/mgl/qt.h
index ceb976a..bf8c97d 100644
--- a/include/mgl/qt.h
+++ b/include/mgl/qt.h
@@ -22,7 +22,7 @@
/*****************************************************************************/
#ifdef __cplusplus
//-----------------------------------------------------------------------------
-#include "mgl/window.h"
+#include "mgl/canvas_wnd.h"
#include
#include
//-----------------------------------------------------------------------------
@@ -141,7 +141,7 @@ protected:
void mouseMoveEvent(QMouseEvent *);
mglCanvas *gr; ///< Built-in mglCanvasQT-er instance (used by default)
- void *draw_par; ///< Parameters for drawing function mglCanvasW::DrawFunc.
+ void *draw_par; ///< Parameters for drawing function mglCanvasWnd::DrawFunc.
/// Drawing function for window procedure. It should return the number of frames.
int (*draw_func)(mglBase *gr, void *par);
QString mousePos; ///< Last mouse position
@@ -163,10 +163,10 @@ private:
};
//-----------------------------------------------------------------------------
/// Base class for windows containing MathGL graphics
-class mglCanvasQT : public mglCanvasW
+class mglCanvasQT : public mglCanvasWnd
{
public:
-using mglCanvasW::Window;
+using mglCanvasWnd::Window;
int sshow; ///< Current state of animation switch (toggle button)
QMathGL *QMGL; ///< Control which draw graphics
QMainWindow *Wnd; ///< Pointer to window
@@ -206,7 +206,7 @@ struct mglDrawScript : public mglDraw
{ gr->Highlight(line+1); mgl_parse_text(gr->Self(),par,text.toAscii()); return 0; }
};
//-----------------------------------------------------------------------------
-/// Convert bitmap from mglCanvasW to QPixmap
+/// Convert bitmap from mglCanvasWnd to QPixmap
void mglConvertFromGraph(QPixmap &pic, mglCanvas *gr, uchar **buf);
/// Make menu, toolbars and return popup menu for MainWindow
QMenu *mglMakeMenu(QMainWindow *Wnd, QMathGL *QMGL, QSpinBox *tet, QSpinBox *phi);
diff --git a/include/mgl/type.h b/include/mgl/type.h
index 600af80..88c1ce9 100644
--- a/include/mgl/type.h
+++ b/include/mgl/type.h
@@ -25,6 +25,9 @@
#endif
#include "mgl/define.h"
//-----------------------------------------------------------------------------
+const mreal Pi = M_PI;
+const mreal NaN = NAN;
+//-----------------------------------------------------------------------------
/// Class for incapsulating point in space
struct mglPoint
{
@@ -42,6 +45,7 @@ struct mglPoint
inline void operator*=(float a) { x*=a; y*=a; z*=a; }
inline void operator/=(float a) { x/=a; y/=a; z/=a; }
};
+#ifndef SWIG
inline mglPoint operator+(const mglPoint &a, const mglPoint &b)
{ return mglPoint(a.x+b.x, a.y+b.y, a.z+b.z, a.c+b.c); }
inline mglPoint operator-(const mglPoint &a, const mglPoint &b)
@@ -72,6 +76,7 @@ inline bool operator!=(const mglPoint &a, const mglPoint &b)
{ return memcmp(&a, &b, sizeof(mglPoint)); }
inline float mgl_norm(const mglPoint &p)
{ return sqrt(p.x*p.x+p.y*p.y+p.z*p.z); }
+#endif
//-----------------------------------------------------------------------------
/// Class for incapsulating color
struct mglColor
@@ -109,6 +114,7 @@ struct mglColor
inline void operator+=(const mglColor &c) { r+=c.r; g+=c.g; b+=c.b; }
inline void operator-=(const mglColor &c) { r-=c.r; g-=c.g; b-=c.b; }
};
+#ifndef SWIG
inline mglColor operator+(const mglColor &a, const mglColor &b)
{ return mglColor(a.r+b.r, a.g+b.g, a.b+b.b, a.a+b.a); }
inline mglColor operator-(const mglColor &a, const mglColor &b)
@@ -121,5 +127,6 @@ inline mglColor operator/(const mglColor &a, float b)
{ return mglColor(a.r/b, a.g/b, a.b/b, a.a/b); }
inline mglColor operator!(const mglColor &a)
{ return mglColor(1-a.r, 1-a.g, 1-a.b, a.a); }
+#endif
//-----------------------------------------------------------------------------
#endif
\ No newline at end of file
diff --git a/include/mgl/window.h b/include/mgl/window.h
index 7bab88d..e46497f 100644
--- a/include/mgl/window.h
+++ b/include/mgl/window.h
@@ -38,44 +38,52 @@ struct mglDraw
{ mgl_draw_thr(this); }
#endif
};
-void mgl_reload_class(void *p);
typedef int (*draw_func)(mglGraph *gr);
int mgl_draw_graph(mglBase *gr, void *p);
-// NOTE: mgl_draw_class() use mglWindow* only. Don't use it with inherited classes
+// NOTE: mgl_draw_class() and mgl_draw_load() use mglWindow* only. Don't use it with inherited classes
int mgl_draw_class(mglBase *gr, void *p);
+void mgl_reload_class(void *p);
//-----------------------------------------------------------------------------
#if MGL_HAVE_QT
#define MGL_WND_KIND 1
#else
#define MGL_WND_KIND 0
#endif
+/// Wrapper class for windows displaying graphics
class mglWindow : public mglGraph
{
friend int mgl_draw_class(mglBase *gr, void *p);
+friend void mgl_reload_class(void *p);
protected:
mglDraw *dr;
int wnd; ///< Type of window
public:
- mglWindow(int (*draw)(HMGL gr, void *p)=NULL, const char *title="MathGL", void *par=NULL, int kind=MGL_WND_KIND) : mglGraph(-1)
+ mglWindow(const char *title="MathGL") : mglGraph(-1)
+ { wnd=0; dr=0; gr = mgl_create_graph_fltk(0,title,0,0); }
+ inline int RunThr() ///< Run main loop for event handling in separate thread (for FLTK only)
+ { return wnd==0 ? mgl_fltk_thr():0; }
+#ifndef SWIG
+ mglWindow(int (*draw)(HMGL gr, void *p), const char *title="MathGL", void *par=NULL, int kind=MGL_WND_KIND, void (*load)(void *p)=0) : mglGraph(-1)
{
wnd=kind; dr=0;
- if(wnd==1) gr = mgl_create_graph_qt(draw,title,par);
- else gr = mgl_create_graph_fltk(draw,title,par);
+ if(wnd==1) gr = mgl_create_graph_qt(draw,title,par,load);
+ else gr = mgl_create_graph_fltk(draw,title,par,load);
}
mglWindow(int (*draw)(mglGraph *gr), const char *title="MathGL", int kind=MGL_WND_KIND) : mglGraph(-1)
{
wnd=kind; dr=0;
- if(wnd==1) gr = mgl_create_graph_qt(mgl_draw_graph,title,(void*)draw);
- else gr = mgl_create_graph_fltk(mgl_draw_graph,title,(void*)draw);
+ if(wnd==1) gr = mgl_create_graph_qt(mgl_draw_graph,title,(void*)draw,0);
+ else gr = mgl_create_graph_fltk(mgl_draw_graph,title,(void*)draw,0);
}
mglWindow(mglDraw *draw, const char *title="MathGL", int kind=MGL_WND_KIND) : mglGraph(-1)
{
wnd=kind; dr=draw;
- if(wnd==1) gr = mgl_create_graph_qt(mgl_draw_class,title,this);
- else gr = mgl_create_graph_fltk(mgl_draw_class,title,this);
+ if(wnd==1) gr = mgl_create_graph_qt(mgl_draw_class,title,this,mgl_reload_class);
+ else gr = mgl_create_graph_fltk(mgl_draw_class,title,this,mgl_reload_class);
}
inline int Run() ///< Run main loop for event handling
{ return (wnd==1)? mgl_qt_run() : mgl_fltk_run(); }
+#endif
inline void ToggleAlpha() ///< Switch on/off transparency (do not overwrite user settings)
{ mgl_wnd_toggle_alpha(gr); }
@@ -108,58 +116,4 @@ public:
{ mglPoint p; mgl_get_last_mouse_pos(gr,&p.x,&p.y,&p.z); return p; }
};
//-----------------------------------------------------------------------------
-/// Base class for windows containing MathGL graphics
-class mglCanvasW : public mglCanvas
-{
-public:
- mglCanvasW();
- virtual ~mglCanvasW();
-
- void SetSize(int w,int h);
- void EndFrame();
- const unsigned char *GetBits();
- inline int GetNumFig() { return NumFig; }
- inline int GetCurFig() { return CurFig; }
- void SetCurFig(int c);
- void ClearFrames();
- inline mglPoint GetMousePos() { return LastMousePos;} // stupid thing to pass G++ bug
- inline void SetMousePos(mglPoint p) { LastMousePos=p; }
- inline void Setup(bool clf_upd=true, bool showpos=false)
- { set(showpos,MGL_SHOW_POS); set(clf_upd,MGL_CLF_ON_UPD); }
-
- virtual void ToggleAlpha()=0; ///< Switch on/off transparency (do not overwrite user settings)
- virtual void ToggleLight()=0; ///< Switch on/off lighting (do not overwrite user settings)
- virtual void ToggleZoom()=0; ///< Switch on/off zooming by mouse
- virtual void ToggleRotate()=0; ///< Switch on/off rotation by mouse
- virtual void ToggleNo()=0; ///< Switch off all zooming and rotation
- virtual void Update()=0; ///< Update picture by calling user drawing function
- virtual void Adjust()=0; ///< Adjust size of bitmap to window size
- virtual void GotoFrame(int d)=0;///< Show arbitrary frame (use relative step)
- virtual void NextFrame() {GotoFrame(+1);} ///< Show next frame (if one)
- virtual void PrevFrame() {GotoFrame(-1);} ///< Show previous frame (if one)
- virtual void Animation()=0; ///< Run slideshow (animation) of frames
- void ReLoad(); ///< Reload user data and update picture
- /// Create a window for plotting based on callback function (can be NULL).
- virtual void Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p),
- const char *title, void *par=NULL,
- void (*reload)(void *p)=NULL, bool maximize=false)=0;
- void Window(int argc, char **argv, int (*draw)(mglGraph *gr), const char *title, bool maximize=false)
- { Window(argc,argv,mgl_draw_graph,title,(void*)draw,0,maximize); }
- /// Create a window for plotting based on class mglDraw.
- void Window(int argc, char **argv, const char *title, mglDraw *draw, bool maximize=false)
- { Window(argc, argv, mgl_draw_class, title, draw, mgl_reload_class, maximize); }
- void SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par=NULL, void (*reload)(void *p)=NULL);
-
-private:
- mglPoint LastMousePos; ///< Last mouse position
- int CurFig; ///< Current figure in the list.
-
- unsigned char *GG; ///< images for all frames (may be too LARGE !!!)
- int NumFig; ///< Number of figures in the list. If 0 then no list and mglCanvas::DrawFunc will called for each drawing.
- void (*LoadFunc)(void *par);
- void *FuncPar; ///< Parameters for drawing function mglCanvas::DrawFunc.
- /// Drawing function for window procedure. It should return the number of frames.
- int (*DrawFunc)(mglBase *gr, void *par);
-};
-//-----------------------------------------------------------------------------
#endif
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
index f18f5b6..edee957 100644
--- a/lang/CMakeLists.txt
+++ b/lang/CMakeLists.txt
@@ -2,11 +2,11 @@ if(MGL_HAVE_PYTHON)
configure_file(${MathGL_SOURCE_DIR}/lang/mgl.i ${MathGL_BINARY_DIR}/lang/mgl.i COPYONLY)
configure_file(${MathGL_SOURCE_DIR}/lang/numpy.i ${MathGL_BINARY_DIR}/lang/numpy.i COPYONLY)
SET(dep_libs mgl)
- if(MGL_HAVE_FLTK)
+# if(MGL_HAVE_FLTK)
get_property(path_to_mglwnd TARGET mgl-wnd PROPERTY LOCATION)
file(TO_NATIVE_PATH ${path_to_mglwnd} MGL_LIB_WND)
SET(dep_libs ${dep_libs} mgl-wnd)
- endif(MGL_HAVE_FLTK)
+# endif(MGL_HAVE_FLTK)
get_property(path_to_mgl TARGET mgl PROPERTY LOCATION)
file(TO_NATIVE_PATH ${path_to_mgl} MGL_LIB)
file(TO_NATIVE_PATH ${MathGL_BINARY_DIR}/lang/mgl.i MGL_I)
@@ -31,7 +31,7 @@ if(MGL_HAVE_PYTHON)
add_custom_command(OUTPUT _mathgl.so mathgl.py
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/lang/setup.py build
DEPENDS ${dep_libs} ${CMAKE_BINARY_DIR}/lang/mgl.i ${CMAKE_BINARY_DIR}/lang/numpy.i
- IMPLICIT_DEPENDS CXX ${CMAKE_SOURCE_DIR}/include/mgl/type.h ${CMAKE_SOURCE_DIR}/include/mgl/data.h ${CMAKE_SOURCE_DIR}/include/mgl/mgl.h
+ IMPLICIT_DEPENDS CXX ${CMAKE_SOURCE_DIR}/include/mgl/type.h ${CMAKE_SOURCE_DIR}/include/mgl/data.h ${CMAKE_SOURCE_DIR}/include/mgl/mgl.h ${CMAKE_SOURCE_DIR}/include/mgl/window.h
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/lang
)
add_custom_target(mgl_python_module ALL DEPENDS _mathgl.so mathgl.py)
diff --git a/lang/mgl.i b/lang/mgl.i
index dd4c5d2..12548c6 100644
--- a/lang/mgl.i
+++ b/lang/mgl.i
@@ -21,7 +21,6 @@
***************************************************************************/
%module mathgl
-#define MGL_NO_WIDGET
#ifdef SWIGOCTAVE
%feature("autodoc", 1);
#endif // SWIGOCTAVE
@@ -33,14 +32,23 @@
%ignore *::operator-=;
%ignore *::operator*=;
%ignore *::operator/=;
+//%ignore mglDataA
%{
#define SWIG_FILE_WITH_INIT
#include "mgl/type.h"
#include "mgl/data.h"
#include "mgl/mgl.h"
+#include "mgl/window.h"
%}
+#if MGL_USE_DOUBLE
+typedef double mreal;
+#else
+typedef float mreal;
+#endif
+
+
#ifdef SWIGOCTAVE
%rename(__add) operator+;
%rename(__sub) operator-;
@@ -82,6 +90,7 @@ import_array();
%include "mgl/type.h"
%include "mgl/data.h"
%include "mgl/mgl.h"
+%include "mgl/window.h"
%extend mglData
{
float __getitem__( int i) { return self->GetVal(i); };
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2ca1681..294c5bb 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -7,14 +7,14 @@ plot.cpp prim.cpp surf.cpp tex_table.cpp vect.cpp volume.cpp evalc.cpp #window.c
)
set(mgl_hdr
-../include/mgl/base_cf.h ../include/mgl/fit.h ../include/mgl/plot.h
-../include/mgl/base.h ../include/mgl/prim.h ../include/mgl/canvas_cf.h
-../include/mgl/font.h ../include/mgl/canvas.h ../include/mgl/surf.h
-${MathGL_BINARY_DIR}/include/mgl/config.h ../include/mgl/mgl_cf.h ../include/mgl/type.h
-../include/mgl/cont.h ../include/mgl/mgl.h ../include/mgl/vect.h
-../include/mgl/data.h ../include/mgl/volume.h
-../include/mgl/define.h ../include/mgl/other.h ../include/mgl/eval.h
-../include/mgl/parser.h ../include/mgl/addon.h ../include/mgl/evalc.h )
+../include/mgl/base_cf.h ../include/mgl/fit.h ../include/mgl/plot.h
+../include/mgl/base.h ../include/mgl/prim.h ../include/mgl/canvas_cf.h
+../include/mgl/font.h ../include/mgl/canvas.h ../include/mgl/surf.h
+../include/mgl/mgl_cf.h ../include/mgl/type.h ${MathGL_BINARY_DIR}/include/mgl/config.h
+../include/mgl/cont.h ../include/mgl/mgl.h ../include/mgl/vect.h
+../include/mgl/data.h ../include/mgl/volume.h ../include/mgl/data_cf.h
+../include/mgl/define.h ../include/mgl/other.h ../include/mgl/eval.h
+../include/mgl/parser.h ../include/mgl/addon.h ../include/mgl/evalc.h )
if(MGL_HAVE_OPENGL)
set(mgl_src ${mgl_src} opengl.cpp )
diff --git a/src/data.cpp b/src/data.cpp
index 9a505aa..6644c06 100644
--- a/src/data.cpp
+++ b/src/data.cpp
@@ -1580,3 +1580,7 @@ float mgl_data_get_value_(uintptr_t *d, int *i, int *j, int *k)
//-----------------------------------------------------------------------------
mreal *mgl_data_data(HMDT dat) { return dat->a; }
//-----------------------------------------------------------------------------
+mreal *mgl_data_value(HMDT dat, long i,long j,long k)
+{ register long ii=i*dat->nx*(j+dat->ny*k);
+ return ii>=0 && iiGetNN() ? dat->a+ii : 0; }
+//-----------------------------------------------------------------------------
diff --git a/texinfo/toc_en.html b/texinfo/toc_en.html
index 72ce447..584acfd 100644
--- a/texinfo/toc_en.html
+++ b/texinfo/toc_en.html
@@ -11,7 +11,7 @@
Pictures
MGL scripts
Download
-Documentation
+Documentation
Other projects
diff --git a/texinfo/web_en.texi b/texinfo/web_en.texi
index ab21e0e..4329747 100644
--- a/texinfo/web_en.texi
+++ b/texinfo/web_en.texi
@@ -67,7 +67,6 @@ supports it in developing GNU and promoting software freedom.''
* Pictures::
* MGL scripts::
* Download::
-* Documentation::
* Other projects::
@end menu
@@ -415,7 +414,7 @@ For more details see @uref{../mathgl_en/mathgl_en_64.html#MGL-scripts, MathGL do
@external
-@node Download, Documentation, MGL scripts, Top
+@node Download, Other projects, MGL scripts, Top
@section Download
@strong{Stable version (v.2.0)}
@@ -486,18 +485,7 @@ There are a set of @uref{http://sourceforge.net/project/showfiles.php?group_id=1
@external
-@node Documentation, Other projects, Download, Top
-@section Documentation
-
-Here you can view and download latest version of documentation. This documentation is just compiled version of @uref{https://sourceforge.net/svn/?group_id=152187,SVN} documentation.
-
-There are @uref{../mathgl_en/mathgl_en.html,English} and @uref{../mathgl_ru/mathgl_ru.html,Russian} versions. It also include @uref{../mathgl_en/mathgl_en_18.html#FAQ,FAQ} about MathGL.
-
-Another variant is download single @uref{mathgl_en.pdf,PDF} (about 7 Mb).
-
-@external
-
-@node Other projects, , Documentation, Top
+@node Other projects, , Download, Top
@section Other projects
Except scientific (non public) projects I also have some general interest projects:
diff --git a/texinfo/widget_en.texi b/texinfo/widget_en.texi
index e3aa3fd..5c0b522 100644
--- a/texinfo/widget_en.texi
+++ b/texinfo/widget_en.texi
@@ -37,7 +37,8 @@ You should inherit yours class from @code{mglDraw} and re-implement one or both
This class is derived from mglGraph class (@pxref{MathGL core}). It provide methods for handling window with MathGL graphics.
-@deftypefn {Constructor on @code{mglWindow}} {} mglWindow (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p)=@code{NULL}, @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{int} kind=@code{0})
+@deftypefn {Constructor on @code{mglWindow}} {} mglWindow (@code{const char *}title=@code{"MathGL"})
+@deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title=@code{"MathGL"}, @code{void *}par=@code{NULL}, @code{int} kind=@code{0})
@deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{int} (*draw)(@code{mglGraph *}gr), @code{const char *}title=@code{"MathGL"}, @code{int} kind=@code{0})
@deftypefnx {Constructor on @code{mglWindow}} {} mglWindow (@code{mglDraw *}draw, @code{const char *}title=@code{"MathGL"}, @code{int} kind=@code{0})
@deftypefnx {C function} @code{HMGL} mgl_create_graph_qt (@code{int} (*draw)(@code{HMGL} gr, @code{void *}p), @code{const char *}title, @code{void *}par)
@@ -49,6 +50,12 @@ Creates a window for plotting. Parameter @var{draw} sets a pointer to drawing fu
There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for the rotating; ',', '.' for viewing of the previous or next frames in the list; 'r' for the switching of transparency; 'f' for the switching of lightning; 'x' for hiding (closing) the window.
@end deftypefn
+@deftypefn {Method on @code{mglWindow}} @code{void} RunThr ()
+@c @deftypefnx {C function} @code{HMGL} mgl_qt_run ()
+@deftypefnx {C function} @code{HMGL} mgl_fltk_thr ()
+Run main loop for event handling in separate thread. Note, right now it work for FLTK windows only.
+@end deftypefn
+
@deftypefn {Method on @code{mglWindow}} @code{void} Run ()
@deftypefnx {C function} @code{HMGL} mgl_qt_run ()
@deftypefnx {C function} @code{HMGL} mgl_fltk_run ()
diff --git a/widgets/CMakeLists.txt b/widgets/CMakeLists.txt
index 78cb132..0ee61d6 100644
--- a/widgets/CMakeLists.txt
+++ b/widgets/CMakeLists.txt
@@ -1,4 +1,4 @@
-set(mgl_wnd_hdr ../include/mgl/window.h)
+set(mgl_wnd_hdr ../include/mgl/window.h ../include/mgl/canvas_wnd.h)
set(mgl_wnd_src window.cpp)
#set(mgl_wnd_src )
diff --git a/widgets/fltk.cpp b/widgets/fltk.cpp
index e63661b..8c73ded 100644
--- a/widgets/fltk.cpp
+++ b/widgets/fltk.cpp
@@ -598,7 +598,7 @@ Fl_MGLView::~Fl_MGLView() {}
// class mglCanvasFL
//
//-----------------------------------------------------------------------------
-mglCanvasFL::mglCanvasFL() : mglCanvasW() { Wnd=0; }
+mglCanvasFL::mglCanvasFL() : mglCanvasWnd() { Wnd=0; }
mglCanvasFL::~mglCanvasFL() { if(Wnd) delete Wnd; }
//-----------------------------------------------------------------------------
void mglCanvasFL::GotoFrame(int d)
@@ -609,10 +609,10 @@ void mglCanvasFL::GotoFrame(int d)
if(GetNumFig()>0 && d) { SetCurFig(f); mgl->FMGL->redraw(); }
}
//-----------------------------------------------------------------------------
-void mgl_fl_next(void *v) { ((mglCanvasW*)v)->NextFrame(); } ///< Callback function for next frame
-void mgl_fl_prev(void *v) { ((mglCanvasW*)v)->PrevFrame(); } ///< Callback function for prev frame
-void mgl_fl_reload(void *v) { ((mglCanvasW*)v)->ReLoad(); } ///< Callback function for reloading
-float mgl_fl_delay(void *v) { return ((mglCanvasW*)v)->GetDelay(); } ///< Callback function for delay
+void mgl_fl_next(void *v) { ((mglCanvasWnd*)v)->NextFrame(); } ///< Callback function for next frame
+void mgl_fl_prev(void *v) { ((mglCanvasWnd*)v)->PrevFrame(); } ///< Callback function for prev frame
+void mgl_fl_reload(void *v) { ((mglCanvasWnd*)v)->ReLoad(); } ///< Callback function for reloading
+float mgl_fl_delay(void *v) { return ((mglCanvasWnd*)v)->GetDelay(); } ///< Callback function for delay
//-----------------------------------------------------------------------------
void mglCanvasFL::Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p), const char *title, void *par, void (*reload)(void *p), bool maximize)
{
@@ -647,19 +647,11 @@ void mglCanvasFL::Window(int argc, char **argv, int (*draw)(mglBase *gr, void *p
delete []tmp[0];
}
//-----------------------------------------------------------------------------
-HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, void *par)
+HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p))
{
mglCanvasFL *g = new mglCanvasFL;
- g->Window(0,0,draw,title,par);
+ g->Window(0,0,draw,title,par,load);
return g;
}
int mgl_fltk_run() { return Fl::run(); }
//-----------------------------------------------------------------------------
-void *mgl_fl_tmp(void *) { Fl::run(); return 0; }
-/*void mgl_fltk_thread()
- * {
- * static pthread_t tmp;
- * pthread_create(&tmp, 0, mgl_fl_tmp, 0);
- * pthread_detach(tmp);
- * }*/
-//-----------------------------------------------------------------------------
diff --git a/widgets/glut.cpp b/widgets/glut.cpp
index da5eefb..66b56f6 100644
--- a/widgets/glut.cpp
+++ b/widgets/glut.cpp
@@ -196,13 +196,13 @@ HMGL mgl_create_graph_glut(int (*draw)(HMGL gr, void *p), const char *title, voi
mglCanvasGLUT::mglCanvasGLUT() : mglCanvasGL() {}
//-----------------------------------------------------------------------------
#if MGL_HAVE_FLTK
-HMGL mgl_create_graph_fltk(int (*)(HMGL gr, void *p), const char *, void *)
+HMGL mgl_create_graph_fltk(int (*)(HMGL gr, void *p), const char *, void *, void (*)(void *p))
{ return NULL; }
int mgl_fltk_run(){return 0;}
#endif
//-----------------------------------------------------------------------------
#if MGL_HAVE_QT
-HMGL mgl_create_graph_qt(int (*)(HMGL gr, void *p), const char *, void *)
+HMGL mgl_create_graph_qt(int (*)(HMGL gr, void *p), const char *, void *, void (*)(void *p))
{ return NULL; }
int mgl_qt_run(){return 0;}
#endif
diff --git a/widgets/qt.cpp b/widgets/qt.cpp
index 28428ee..16dabc1 100644
--- a/widgets/qt.cpp
+++ b/widgets/qt.cpp
@@ -533,13 +533,13 @@ void QMathGL::print()
//-----------------------------------------------------------------------------
void QMathGL::nextSlide()
{
- mglCanvasW *g = dynamic_cast(gr);
+ mglCanvasWnd *g = dynamic_cast(gr);
if(g && g->GetNumFig()>1) g->NextFrame();
emit frameChanged(+1);
}
void QMathGL::prevSlide()
{
- mglCanvasW *g = dynamic_cast(gr);
+ mglCanvasWnd *g = dynamic_cast(gr);
if(g && g->GetNumFig()>1) g->PrevFrame();
emit frameChanged(-1);
}
@@ -561,7 +561,7 @@ void QMathGL::adjust()
// class mglCanvasQT
//
//-----------------------------------------------------------------------------
-mglCanvasQT::mglCanvasQT() : mglCanvasW()
+mglCanvasQT::mglCanvasQT() : mglCanvasWnd()
{ Wnd = 0; }
//-----------------------------------------------------------------------------
void mglCanvasQT::GotoFrame(int d)
@@ -792,19 +792,11 @@ QMenu *mglMakeMenu(QMainWindow *Wnd, QMathGL *QMGL, QSpinBox *tet, QSpinBox *phi
o->addAction(TR("About &Qt"), QMGL, SLOT(aboutQt()));
}
//-----------------------------------------------------------------------------
-HMGL mgl_create_graph_qt(int (*draw)(HMGL gr, void *p), const char *title, void *par)
+HMGL mgl_create_graph_qt(int (*draw)(HMGL gr, void *p), const char *title, void *par, void (*load)(void *p))
{
mglCanvasQT *g = new mglCanvasQT;
- g->Window(0,0,draw,title,par);
+ g->Window(0,0,draw,title,par,load);
return g;
}
int mgl_qt_run() { return (qApp)?qApp->exec():-1; }
//-----------------------------------------------------------------------------
-void *mgl_qt_tmp(void *) { mgl_qt_run(); return 0; }
-/*void mgl_qt_thread()
- * {
- * static pthread_t tmp;
- * pthread_create(&tmp, 0, mgl_qt_tmp, 0);
- * pthread_detach(tmp);
- }*/
-//-----------------------------------------------------------------------------
diff --git a/widgets/window.cpp b/widgets/window.cpp
index c0fce90..70a69fd 100644
--- a/widgets/window.cpp
+++ b/widgets/window.cpp
@@ -17,34 +17,34 @@
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#include "mgl/window.h"
+#include "mgl/canvas_wnd.h"
//-----------------------------------------------------------------------------
-mglCanvasW::mglCanvasW() : mglCanvas()
+mglCanvasWnd::mglCanvasWnd() : mglCanvas()
{
Setup(); LoadFunc=0; FuncPar=0; DrawFunc=0;
GG = 0; NumFig = 0; CurFig = -1;
// set(MGL_USEDRWDAT); // TODO: experimental feature -- test later
}
//-----------------------------------------------------------------------------
-mglCanvasW::~mglCanvasW() { if(GG) free(GG); }
+mglCanvasWnd::~mglCanvasWnd() { if(GG) free(GG); }
//-----------------------------------------------------------------------------
-void mglCanvasW::SetCurFig(int c) { CurFig=c; if(get(MGL_USEDRWDAT)) GetDrwDat(c); }
+void mglCanvasWnd::SetCurFig(int c) { CurFig=c; if(get(MGL_USEDRWDAT)) GetDrwDat(c); }
//-----------------------------------------------------------------------------
-void mglCanvasW::ClearFrames()
+void mglCanvasWnd::ClearFrames()
{
if(GG) free(GG); GG = 0;
CurFrameId = NumFig = CurFig = 0;
DrwDat.clear();
}
//-----------------------------------------------------------------------------
-void mglCanvasW::SetSize(int w,int h)
+void mglCanvasWnd::SetSize(int w,int h)
{
ClearFrames();
mglCanvas::SetSize(w,h);
// if(Wnd) Wnd->size(w,h);
}
//-----------------------------------------------------------------------------
-void mglCanvasW::EndFrame()
+void mglCanvasWnd::EndFrame()
{
CurFig = CurFrameId-1;
if(!GG)
@@ -62,7 +62,7 @@ void mglCanvasW::EndFrame()
CurFig++;
}
//-----------------------------------------------------------------------------
-void mglCanvasW::SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par, void (*reload)(void *p))
+void mglCanvasWnd::SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par, void (*reload)(void *p))
{
ClearFrames();
int n = draw ? draw(this,par) : 0;
@@ -71,7 +71,7 @@ void mglCanvasW::SetDrawFunc(int (*draw)(mglBase *gr, void *p), void *par, void
LoadFunc = reload;
}
//-----------------------------------------------------------------------------
-const unsigned char *mglCanvasW::GetBits()
+const unsigned char *mglCanvasWnd::GetBits()
{
const unsigned char *g = mglCanvas::GetBits();
if(GG && NumFig>0 && CurFig=0)
@@ -79,7 +79,7 @@ const unsigned char *mglCanvasW::GetBits()
return g;
}
//-----------------------------------------------------------------------------
-void mglCanvasW::ReLoad()
+void mglCanvasWnd::ReLoad()
{
if(LoadFunc)
{
@@ -93,69 +93,77 @@ void mglCanvasW::ReLoad()
}
//-----------------------------------------------------------------------------
void mgl_wnd_toggle_alpha(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->ToggleAlpha(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ToggleAlpha(); }
void mgl_wnd_toggle_light(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->ToggleLight(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ToggleLight(); }
void mgl_wnd_toggle_zoom(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->ToggleZoom(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ToggleZoom(); }
void mgl_wnd_toggle_rotate(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->ToggleRotate(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ToggleRotate(); }
void mgl_wnd_toggle_no(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->ToggleNo(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ToggleNo(); }
void mgl_wnd_update(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->Update(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->Update(); }
void mgl_wnd_reload(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->ReLoad(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->ReLoad(); }
void mgl_wnd_adjust(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->Adjust(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->Adjust(); }
void mgl_wnd_next_frame(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->NextFrame(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->NextFrame(); }
void mgl_wnd_prev_frame(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->PrevFrame(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->PrevFrame(); }
void mgl_wnd_animation(HMGL gr)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->Animation(); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->Animation(); }
void mgl_setup_window(HMGL gr, int clf_upd, int showpos)
-{ mglCanvasW *g = dynamic_cast(gr); if(g) g->Setup(clf_upd, showpos); }
+{ mglCanvasWnd *g = dynamic_cast(gr); if(g) g->Setup(clf_upd, showpos); }
//-----------------------------------------------------------------------------
void mgl_wnd_toggle_alpha_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->ToggleAlpha(); }
void mgl_wnd_toggle_light_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->ToggleLight(); }
void mgl_wnd_toggle_zoom_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->ToggleZoom(); }
void mgl_wnd_toggle_rotate_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->ToggleRotate(); }
void mgl_wnd_toggle_no_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->ToggleNo(); }
void mgl_wnd_update_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->Update(); }
void mgl_wnd_reload_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->ReLoad(); }
void mgl_wnd_adjust_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->Adjust(); }
void mgl_wnd_next_frame_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->NextFrame(); }
void mgl_wnd_prev_frame_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->PrevFrame(); }
void mgl_wnd_animation_(uintptr_t *gr)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->Animation(); }
void mgl_setup_window_(uintptr_t *gr, int *clf_upd, int *showpos)
-{ mglCanvasW *g = dynamic_cast((HMGL)(*gr));
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
if(g) g->Setup(*clf_upd, *showpos); }
+void mgl_get_last_mouse_pos_(uintptr_t *gr, float *x, float *y, float *z)
+{ mglCanvasWnd *g = dynamic_cast((HMGL)(*gr));
+ mglPoint p; if(g) g->GetMousePos();
+ *x=p.x; *y=p.y; *z=p.z; }
+void mgl_get_last_mouse_pos(HMGL gr, float *x, float *y, float *z)
+{ mglCanvasWnd *g = dynamic_cast(gr);
+ mglPoint p; if(g) g->GetMousePos();
+ *x=p.x; *y=p.y; *z=p.z; }
//-----------------------------------------------------------------------------
#if MGL_HAVE_FLTK==0
-HMGL mgl_create_graph_fltk(int (*)(HMGL gr, void *p), const char *, void *)
+HMGL mgl_create_graph_fltk(int (*)(HMGL gr, void *p), const char *, void *, void (*)(void *p))
{ return NULL; }
int mgl_fltk_run(){return 0;}
#endif
@@ -163,13 +171,25 @@ int mgl_fltk_run(){return 0;}
uintptr_t mgl_create_graph_fltk_(const char *title, int l)
{
char *s = new char[l+1]; memcpy(s,title,l); s[l]=0;
- uintptr_t t = uintptr_t(mgl_create_graph_fltk(0,s,0));
+ uintptr_t t = uintptr_t(mgl_create_graph_fltk(0,s,0,0));
delete []s; return t;
}
int mgl_fltk_run_() { return mgl_fltk_run(); }
//-----------------------------------------------------------------------------
+void *mgl_fltk_tmp(void *)
+{ mgl_fltk_run(); return 0; }
+//-----------------------------------------------------------------------------
+int mgl_fltk_thr() // NOTE: Qt couldn't be running in non-primary thread
+{
+ static pthread_t thr;
+ pthread_create(&thr,0,mgl_fltk_tmp,0);
+ pthread_detach(thr);
+ return 0; // stupid, but I don't want keep result returned by Fl::Run()
+}
+//-----------------------------------------------------------------------------
+
#if MGL_HAVE_QT==0
-HMGL mgl_create_graph_qt(int (*)(HMGL gr, void *p), const char *, void *)
+HMGL mgl_create_graph_qt(int (*)(HMGL gr, void *p), const char *, void *, void (*)(void *p))
{ return NULL; }
int mgl_qt_run(){return 0;}
#endif
@@ -177,20 +197,26 @@ int mgl_qt_run(){return 0;}
uintptr_t mgl_create_graph_qt_(const char *title, int l)
{
char *s = new char[l+1]; memcpy(s,title,l); s[l]=0;
- uintptr_t t = uintptr_t(mgl_create_graph_qt(0,s,0));
+ uintptr_t t = uintptr_t(mgl_create_graph_qt(0,s,0,0));
delete []s; return t;
}
int mgl_qt_run_() { return mgl_qt_run(); }
//-----------------------------------------------------------------------------
+//
+// mglDraw class handling
+//
+//-----------------------------------------------------------------------------
int mgl_draw_class(mglBase *gr, void *p)
{
mglGraph g(gr);
mglWindow *w = (mglWindow *)p; // so stupid way to save mglDraw class inheritance :(
return (w && w->dr) ? w->dr->Draw(&g) : 0;
}
-//return p ? ((mglDraw *)p)->Draw(&g) : 0; }
void mgl_reload_class(void *p)
-{ if(p) ((mglDraw *)p)->Reload(); }
+{
+ mglWindow *w = (mglWindow *)p; // so stupid way to save mglDraw class inheritance :(
+ if(w && w->dr) w->dr->Reload();
+}
//-----------------------------------------------------------------------------
int mgl_draw_graph(mglBase *gr, void *p)
{